package hxy.bytecode.jvm.volatil;

/**
 * @author eric
 * @program bytecode
 * @description 指令重排
 * @date 2020/5/18
 */
public class VolatileTest {

//    1.可见性 2.指令重排

    private static volatile int x = 0, y = 0;
    private static volatile int a = 0, b = 0;

    public static void main(String[] args) throws InterruptedException {
        int i = 0;
        for (; ; ) {
            i++;
            x=0;y=0;
            a=0;b=0;

            Thread thread = new Thread(() -> {
                a = 1;
                x = b;
            });

            Thread thread1 = new Thread(() -> {
                b = 1;
                y = a;
            });

            thread.start();
            thread1.start();
            thread.join();
            thread1.join();
            String result = "第" + i + "次xy相等为0";

            if (x == 0 && y == 0) {
                System.out.println(result);
                break;
            }else{
                System.out.println(i);
            }

        }
    }
}
